#ifndef SOURCEATTENUEE_H
#define SOURCEATTENUEE_H

#include "Source.hpp"

/**
 * Implémente une source de lumière dont l'intensité décroit avec la
 * distance. On calcule un coefficient d'atténuation avec un polynôme
 * du deuxième degré en r, la distance entre la ssource et le point
 * éclairé~:
 * \f[
 * a \left( r \right) = \frac{1}{c_1 + c_2 \, r + c_3 \, r^2}
 * \f]
 * où les trois coefficients peuvent avoir la valeur désirée.
 *
 * @author Johan "Solo" Luisier
 *
 * @date 2010
 */
class SourceAttenuee : public Source
{
 public:
  SourceAttenuee(const Couleur& coul = Couleur(), const Coord& coord = Coord(),
		 const double& c1 = 1., const double& c2 = 0.,
		 const double& c3 = 0.);
  SourceAttenuee(const SourceAttenuee& src);
  SourceAttenuee(const Source& src);
  virtual ~SourceAttenuee();

  double attenuation(const Coord& coord) const;

  const double& constant() const;
  const double& lineaire() const;
  const double& quadratique() const;

 protected:
  double
    coeff1, /**< Coefficient d'atténuation constant. */
    coeff2, /**< Coefficient d'atténuation linéaire. */
    coeff3; /**< Coefficient d'atténuation quadratique. */
};


#endif // SOURCEATTENUEE_H
